/*
 * ColaMensajes.cpp
 *
 *  Created on: Nov 4, 2011
 *      Author: gonzalo
 */

#include "ColaMensajes.h"
#include "../common/utils/Logger.h"

ColaMensajes::ColaMensajes(std::string owner)  {
	this->owner = owner;
}

ColaMensajes::~ColaMensajes() {

	while(!mensajes.empty()){
		delete mensajes.back();
		mensajes.pop_back();
	}

}

void ColaMensajes::setMensajeValidated(DTO* dto){
	if (dto == NULL) {
		return;
	}

	if (owner == dto->getOwner()) {
		return;
	}

	setMensaje(dto);
}

void ColaMensajes::setMensaje(DTO* dto){
	if (dto ==NULL) {
		return;
	}

	Logger::log("ColaMensajes", "setMensaje","Recibio un nuevo DTO de " + dto->getOwner() + " en lista de owner:" + owner );
	mensajes.push_back(dto);

	signal();
}

DTO* ColaMensajes::getMensaje(){
	Logger::log("ColaMensajes", "getMensaje","Pide mensaje (DTO) a la lista de owner:" + owner);


	//Si la Lista esta vacia me quedo bloqueado hasta que llegue una senial
	if (mensajes.empty()) {
		wait();
	}

	DTO* retorno;
	if (!mensajes.empty()) {
		retorno = mensajes.front();
		mensajes.pop_front();
	}else{
		retorno = NULL;
	}

	return retorno;
}
